﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Security;
using System.Configuration;
using Comom.Project.ControllerCom;
using Dhtl.Service.IService;
using Comom.Project.JsonCom;
using Comom.Project.Securitys;
using FarmeWork.Helper;
using dai_hoc_tuong_lai.Models;

namespace dai_hoc_tuong_lai.Controllers
{
    public class AccountController : UTController
    {
        //
        // GET: /Account/
        private readonly IRoles _iRoles;
        private readonly IUser _iUser;
        private readonly IUserInRoles _iUserInRoles;
        private readonly EncryptPass mahoa = new EncryptPass();
        private readonly UTAuthenticationService authenticationService = new UTAuthenticationService();
        private readonly EmailHelper emailCode = new EmailHelper();
        private readonly IEmailSystem _iEmailSystem;

        public AccountController(IRoles iRoles, IUser iUser, IUserInRoles iUserInRoles, IEmailSystem iEmailSystem)
        {
            this._iRoles = iRoles;
            this._iUser = iUser;
            this._iUserInRoles = iUserInRoles;
            this._iEmailSystem = iEmailSystem;
        }

        public ActionResult Index(string ReturnUrl)
        {
            return View();
        }

        public ActionResult Login(string ReturnUrl)
        {
            LoginModel model = new LoginModel();
            model.ReturnUrl = ReturnUrl;
            return View(model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult Login(LoginModel model, string returnUrl)
        {
            if (string.IsNullOrEmpty(model.name))
            {
                return JsonError(" vui lòng nhập email đăng nhập");
            }

            if (string.IsNullOrEmpty(model.name))
            {
                return JsonError(" vui lòng nhập mật khẩu đăng nhập");
            }
            
            string Passs = mahoa.Encrypt(model.pass, "dailyphuthinh", true);

            var userActive = _iUser.LogIn(model.name, Passs);

            if (userActive  == null)
            {
                return JsonError("Tài khoản này , không có trong hệ thống của chúng tôi");
            }

            bool loginStatus = Membership.ValidateUser(model.name, Passs);

            if (loginStatus)
            {
                model.ReturnUrl = returnUrl;

                if (!string.IsNullOrEmpty(model.ReturnUrl))
                {
                    authenticationService.LogIn(model.name);
                    return JsonSuccess(model.ReturnUrl, null);
                }
                else
                {
                    authenticationService.LogIn(model.name);
                    return JsonSuccess(Url.Action("Index", "Admin", new { area = "Admin" }), null);
                }

            }
            else
            {
                return JsonError("Tài khoản này , không có trong hệ thống của chúng tôi");
            }

        }

        public ActionResult LogOut()
        {
            authenticationService.LogOut();
            UTContext ut = new UTContext();
            ut.LogOut();
            ut = null;
            Session.Abandon();
            return RedirectToAction("Index","Home");
        }


        public ActionResult ForgetPassword()
        {
            LoginModel model = new LoginModel();
            return PartialView(model);
        }

        [HttpPost]
        [ValidateInput(false)]
        public ActionResult ForgetPassword(LoginModel model)
        {
            if (string.IsNullOrEmpty(model.name))
            {
                return JsonError(" Vui lòng nhập Email");
            }

            if (!IsValidEmailAddress(model.name))
            {
                return JsonError("Email nhập sai định dạng");
            }

            var usr = _iUser.GetByEmail(model.name);
            if (usr == null)
            {
                return JsonError("Email này không tồn tại trong hệ thống của chúng tôi");
            }
            else
            {
                var c = _iEmailSystem.List().First();

                string smtp = string.Empty;
                int port = 0;

                if (c.type == true)
                {
                    smtp = ConfigurationManager.AppSettings["HostGoogle"].ToString();
                    port = int.Parse(ConfigurationManager.AppSettings["PortGoogle"].ToString());

                }
                else
                {
                    smtp = ConfigurationManager.AppSettings["HostYahoo"].ToString();
                    port = int.Parse(ConfigurationManager.AppSettings["PortYahoo"].ToString());

                }

                string noidung = "<div>UserName : " + usr.Email + "</div></br><div>Password : " + mahoa.Decrypt(usr.Pass, "dailyphuthinh", true) + "</div></br>";

                emailCode.EmailTemple(port, noidung, c, c.Email, smtp, "Lấy lại mật khẩu tại sunnykao.com", null, string.Empty, string.Empty);

                return JsonSuccess(null, null);
            }


        }
    }
}
